mybatis 您所在的位置:网站首页 mybatis plus 多表 mybatis

mybatis

2023-03-15 17:15| 来源: 网络整理| 查看: 265

mybati-plus多表分页查询

首先编写VO类,VO类包含了要查询的字段值,现在有如下几个表

blog表

@Data public class Blog { @TableId(value = "blog_id", type = IdType.AUTO) private long blog_id; // 主键 private String blog_title; private Timestamp blog_date; private String blog_content; private String blog_cover; private String blog_description; private long user_id; private boolean blog_show; }

blogData表

@Data @TableName("blogdata") public class BlogData { private long blog_id; // blog表的主键 private int blog_likes; private int blog_browse; }

CategoryBlog表

@Data public class CategoryBlog { private int category_id; private long blog_id; // blog表的主键 }

label表

@Data public class labelBlog { private int label_id; private long blog_id; // blog表的主键 }

现在我的需求就是查询blog的内容、标签、分类、点赞量和浏览量,这些数据分别村放在4个表中,那么我就需要将这4个表重新整合成一个类,那么新建一个NewBlogVo类

@Data public class NewBlogVo { private long blog_id; private String blog_title; private Timestamp blog_date; private String blog_content; private String blog_cover; private String blog_description; private long user_id; private boolean blog_show; // private BlogData blogData; // blogData private int blog_likes; private int blog_browse; // category private int category_id; // label private int label_id; // md markdown格式 private String md_content; }

xml编写 其中select中的 ID可以自己命名,resultype是NewBlogVo所在的位置

DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> select b.blog_id, b.blog_title, b.blog_date, b.blog_content, b.blog_cover, b.blog_description, b.user_id, b.blog_show, bd.blog_likes, bd.blog_browse, lb.label_id, cb.category_id, md.md_content from blog b,category_blog cb,label_blog lb,blogdata bd,md md where b.blog_id = cb.blog_id and b.blog_id = lb.blog_id and b.blog_id = bd.blog_id and b.blog_id = md.md_id

在application.yml中添加xml文件扫描的位置,我的xml是放在resources下的Mapper下面

mybatis-plus: configuration: map-underscore-to-camel-case: false # 这个地方把我搞苦了 mapper-locations: classpath:/Mapper/*.xml

mapper编写

@Mapper public interface BlogVoMapper extends BaseMapper { // 方法名要和xml中的ID相同 IPage selectBlogByPage(IPage blogVoIPage); }

实现类

@Service public class BlogVoServiceImpl extends ServiceImpl implements BlogVoService { @Autowired private BlogVoMapper blogVoMapper; @Override public IPage selectBlogByPage(int page, int size) { Page blogVoPage = new Page(page,size,false); IPage blogVoIPage; blogVoIPage = blogVoMapper.selectBlogByPage(blogVoPage); return blogVoIPage; } }

controller

@Autowired private BlogVoService blogVoService; @GetMapping("/getBlog/{page}/{size}") public Result getBlogByPage(@PathVariable Integer page,@PathVariable Integer size) { return result.ok(blogVoService.selectBlogByPage(page,size)); }

小插曲

在配置完成多表分页查询之后,我发现SQL语句能正常执行,控制台也能输出正确SQL语句,但是数据就是拿不到,我一直以为是我的分页查询写的不对,前前后后找bug找了5个小时,恁是没有找到bug。然后我就尝试着去先一个表一个表查,查到的结果放到一个VO类中,虽然这样子比较麻烦。

但是,就在这个时候,发生了不可思议的事情,我使用mybatis-plus自带的list查询查出来的结果是空数据,不过size却不等于0,然后之前我测试通过的接口查出来的数据也为空,我突然就想到了我好像在application.yml的时候把mybatis-plus的驼峰命名删除了,导致实体类额数据库中的字段不匹配,然后我连忙将不使用驼峰命名打开,结果奇迹出现了,我今天下午找了一个下午的bug的多表分页查询有行了

mybatis-plus: configuration: map-underscore-to-camel-case: false #取消驼峰命名

未取消驼峰命名前 这个失误浪费了我5个小时的时间找bug

{ "success": true, "data": { "records": [ null ], "total": 0, "size": 10, "current": 1, "orders": [], "optimizeCountSql": true, "hitCount": false, "countId": null, "maxLimit": null, "searchCount": false, "pages": 0 }, "message": null }

取消驼峰命名后

{ "success": true, "data": { "records": [ { "blog_id": 9, "blog_title": "vue使用md-editor", "blog_date": 1678512797000, "blog_content": "", "blog_cover": "202303111331369b53f976ee414749b04822347b9119a2.jpg", "blog_description": "vue中使用markdown编辑器", "user_id": 1, "blog_show": true, "blog_likes": 0, "blog_browse": 0, "category_id": 9, "label_id": 9, "md_content": "" } ], "total": 0, "size": 10, "current": 1, "orders": [], "optimizeCountSql": true, "hitCount": false, "countId": null, "maxLimit": null, "searchCount": false, "pages": 0 }, "message": null }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有